#!/usr/bin/env python
# coding=utf-8
# 有时 pasa出来的结果会出现 移码错误 可以找到原有的gff版本进行校正

import re

import argparse
import sys


parser = argparse.ArgumentParser(
    description='''
    有时 pasa出来的结果会出现 移码错误 需要找到原有的gff版本进行校正
    用法:
    fix_pasa_gff3_frame_work_problem.py -i NIG_ONT_OGS_v1.0.gff3 -r gene_with_busco.gff3 -o NIG_ONT_OGS_v1.1.gff3
    由大天才于2021年8月9日创建于浙江农业大学''')




parser.add_argument('-i',
                help='必须给定，输入的gff3文件 ')

parser.add_argument('-r',
                help='运行pasa前的gff3文件 ')

parser.add_argument('-o',
                help='必须给定，输出文件')



args = parser.parse_args()

if not args.i or not args.o or not args.r:
    parser.print_help()
    sys.exit()



infile = args.i

outfile= args.o

rawfile  = args.r






raw_dic = {}

with open(rawfile) as fila:
	for i in fila:
		k = i.strip().split('#')[0].split('\t')
		if len(k)>2:

			des = {i.strip().split('=')[0]:'='.join(i.strip().split('=')[1:]) for i in k[-1].split(';')}

			seq_id = des['ID']

			raw_dic[seq_id] = (k[0],k[3],k[4],k[6],k[7])


outfile = open(outfile,'w')


n = 0
with open(infile) as fila:

	for i in fila:

		k = i.strip().split('#')[0].split('\t')

		if len(k)>2:

			des = {i.strip().split('=')[0]:'='.join(i.strip().split('=')[1:]) for i in k[-1].split(';')}

			seq_id = des['ID']
			

			if seq_id in raw_dic and k[0] == raw_dic[seq_id][0] and k[3] == raw_dic[seq_id][1] and k[4] == raw_dic[seq_id][2] and k[6] == raw_dic[seq_id][3]:

				if k[7] !=  raw_dic[seq_id][4]:

					print('unmatch fix at %s' %seq_id)
					n += 1
					k[7] = raw_dic[seq_id][4]

			line = '\t'.join(k)+'\n'
		else:
			line = i.strip()+'\n'

		outfile.write(line)

print('total fix %s ' % n)
